package com.ruoyi.equip.service;

import com.ruoyi.common.core.domain.SelectEntity;
import com.ruoyi.equip.domain.DeviceInfo;
import com.ruoyi.equip.domain.TagInfo;
import com.ruoyi.equip.domain.dto.ReaderModelDto;
import com.ruoyi.equip.domain.entity.table.ExportParam;
import com.ruoyi.equip.domain.vo.DeviceDataVo;
import com.ruoyi.equip.domain.vo.DeviceInfoVO;
import com.ruoyi.equip.domain.vo.TagVo;
import com.ruoyi.td.entity.DeviceProperty;
import com.ruoyi.td.entity.DevicePropertyLogQueryBo;
import com.ruoyi.td.vo.ThingModelVo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface IDeviceInfoService {

    /**
     * 根据条件分页查询读写器列表
     *
     * @param deviceInfoVO 读写器信息
     * @return 读写器信息集合信息
     */
    public List<DeviceInfoVO> selectDeviceInfoList(DeviceInfoVO deviceInfoVO);

    /**
     * 新增读写器信息
     *
     * @param deviceInfo 读写器信息
     * @return 结果
     */

    public int add(DeviceInfo deviceInfo);

    /**
     * 更新读写器设备
     * @param deviceInfo  读写器信息
     * @return 结果
     */
    int update(DeviceInfo deviceInfo);

    /**
     * 删除
     * @param deviceId 读写器物理ID
     * @return 结果
     */
    int deleteById(String deviceId);


    /**
     * 获取指定读写器详情
     * @param deviceId 读写器物理ID
     */
    DeviceInfoVO getDevicesDetail(String deviceId);

    /**
     * 获取读写器属性历史数据
     * @param logQueryBo  物模型单属性历史查询搜索实体类
     */
    List<DeviceProperty> getPropertyHistory(DevicePropertyLogQueryBo logQueryBo);

    /**
     * 查询所有读写器下拉框
     * @return 读写器下拉框
     */
    List<SelectEntity> selectList();

    /**
     * 获取指定读写器物模型
     * @param deviceId 读写器物理ID
     * @return 指定读写器物模型属性
     */
    List<ThingModelVo.Property>  getThingModelOfId(String deviceId);

    /**
     * 查询所有读写器经纬度
     * @return 查询所有读写器经纬度
     */
    List<DeviceInfoVO> getGis();

    /**
     * 查询指定读写器的最后一次上传数据
     * @param deviceId 读写器物理ID
     * @return  上传数据
     */
    DeviceDataVo getLastData(String deviceId);

    /**
     * 导出xlx
     */
    void export(HttpServletResponse response, ExportParam exportParam);

    /**
     *  批量删除读写器
     * @param deviceIds 读写器物理ID
     */
    void batchDel(List<String> deviceIds);

    /**
     * 查询指定产品下的读写器设备
     * @param productKey 产品key
     */
    boolean hasDeviceOfProductKey(String productKey);

    /**
     * 查询读写器下的标签
     * @param deviceId  读写器物理ID
     */
    List<TagVo> getChild(String deviceId);

    /**
     * 加载读写器缓存数据
     */
    void  loadingDeviceCache();

    Map<String,Boolean> getOnlie(List<String> deviceIds);


    /**
     * 获取指定读写器下标签
     */
    List<String> selectTagIds(String deviceId);



    /**
     * 获取指定读写器下标签
     */
    List<TagInfo> selectTags(String deviceId);

    String resetDevice(String sbId);
}
